home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MACD 5
/
MACD 5.bin
/
workbench
/
boot
/
czesc_2
/
toolmanager
/
source
/
prefs
/
docklistwindow.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-05-15
|
22KB
|
750 lines
/*
* docklistwindow.c V2.1
*
* dock list edit window handling
*
* (c) 1990-1993 Stefan Becker
*/
#include "ToolManagerConf.h"
/* Window data */
static struct Gadget *gl; /* Gadget list */
static struct Window *w; /* Window */
static struct MsgPort *wp; /* Window user port */
static UWORD ww,wh; /* Window size */
static struct List *ToolsList;
static struct ToolNode *CurrentTool;
static LONG CurrentTop; /* Top tool ordinal number */
static LONG CurrentOrd; /* Current tool ordinal number */
static ULONG CurrentGadgetNum;
static BOOL ReqOpen;
static struct Requester DummyReq;
#define WINDOW_IDCMP (IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW|BUTTONIDCMP|\
LISTVIEWIDCMP|TEXTIDCMP|IDCMP_VANILLAKEY)
/* Gadget data */
#define GAD_TOOLS 0
#define GAD_NEW 1
#define GAD_REMOVE 2
#define GAD_TOP 3
#define GAD_UP 4
#define GAD_DOWN 5
#define GAD_BOTTOM 6
#define GAD_EXEC_BUT 7
#define GAD_EXEC_TXT 8
#define GAD_IMAGE_BUT 9
#define GAD_IMAGE_TXT 10
#define GAD_SOUND_BUT 11
#define GAD_SOUND_TXT 12
#define GAD_OK 13
#define GAD_CANCEL 14
#define GADGETS 15
static struct GadgetData gdata[GADGETS];
/* Gadget tags */
static struct TagItem lvtags[]={GTLV_Labels, NULL,
TAG_DONE};
static struct TagItem exectags[]={GTTX_Text, NULL,
GTTX_Border, TRUE,
TAG_DONE};
static struct TagItem imagetags[]={GTTX_Text, NULL,
GTTX_Border, TRUE,
TAG_DONE};
static struct TagItem soundtags[]={GTTX_Text, NULL,
GTTX_Border, TRUE,
TAG_DONE};
/* Gadget vanilla key data */
#define KEY_NEW 0
#define KEY_EXEC 1
#define KEY_IMAGE 2
#define KEY_SOUND 3
#define KEY_OK 4
#define KEY_CANCEL 5
static char KeyArray[KEY_CANCEL+1];
/* Init dock list edit window */
void InitDockListEditWindow(UWORD left, UWORD fheight)
{
ULONG i,tmp,tmp2,tmp3,maxw1,maxw2,maxw3;
ULONG strheight=fheight+2;
struct GadgetData *gd;
/* Init strings */
gdata[GAD_TOOLS].name =AppStrings[MSG_DOCKLISTWIN_TOOLS_GAD];
gdata[GAD_NEW].name =AppStrings[MSG_DOCKLISTWIN_NEW_GAD];
gdata[GAD_REMOVE].name =AppStrings[MSG_WINDOW_REMOVE_GAD];
gdata[GAD_TOP].name =AppStrings[MSG_WINDOW_TOP_GAD];
gdata[GAD_UP].name =AppStrings[MSG_WINDOW_UP_GAD];
gdata[GAD_DOWN].name =AppStrings[MSG_WINDOW_DOWN_GAD];
gdata[GAD_BOTTOM].name =AppStrings[MSG_WINDOW_BOTTOM_GAD];
gdata[GAD_OK].name =AppStrings[MSG_WINDOW_OK_GAD];
gdata[GAD_CANCEL].name =AppStrings[MSG_WINDOW_CANCEL_GAD];
/* Calculate width for listview gadget */
gd=gdata;
ww=2*TextLength(&TmpRastPort,gd->name,strlen(gd->name));
if ((tmp=ListViewColumns*ScreenFont->tf_XSize) > ww) ww=tmp;
/* Calculate maximum width for tools gadgets */
maxw1=0;
for (gd++, i=GAD_NEW; i<=GAD_BOTTOM; i++, gd++)
if ((tmp=TextLength(&TmpRastPort,gd->name,strlen(gd->name))) > maxw1)
maxw1=tmp;
maxw1+=2*INTERWIDTH;
ww+=2*maxw1+3*INTERWIDTH;
/* Calculate maximum label width for text gadgets */
{
char **s;
maxw2=0;
s=&AppStrings[MSG_WINDOW_EXEC_GAD];
for (i=MSG_WINDOW_EXEC_GAD; i<=MSG_WINDOW_SOUND_GAD; i++, s++)
if ((tmp=TextLength(&TmpRastPort,*s,strlen(*s))) > maxw2) maxw2=tmp;
maxw2+=2*INTERWIDTH;
}
/* Calculate minimal width for text gadgets */
tmp=TextLength(&TmpRastPort,AppStrings[MSG_LISTREQ_TITLE_EXEC],
strlen(AppStrings[MSG_LISTREQ_TITLE_EXEC]))+3*INTERWIDTH;
if ((tmp+=maxw2) > ww) ww=tmp;
/* Calculate button gadgets width */
gd=&gdata[GAD_OK];
maxw3=TextLength(&TmpRastPort,gd->name,strlen(gd->name));
gd++;
if ((tmp=TextLength(&TmpRastPort,gd->name,strlen(gd->name)))
> maxw3)
maxw3=tmp;
maxw3+=2*INTERWIDTH;
if ((tmp=2*(maxw3+INTERWIDTH)) > ww) ww=tmp;
/* window height */
wh=(ListViewRows+3)*fheight+6*INTERHEIGHT+6;
/* Init gadgets */
gd=gdata;
tmp=WindowTop+fheight+INTERHEIGHT;
/* Tools list gadget */
gd->type=LISTVIEW_KIND;
gd->flags=PLACETEXT_ABOVE;
gd->tags=lvtags;
gd->left=left+maxw1+INTERWIDTH;
gd->top=tmp;
gd->width=ww-3*INTERWIDTH-2*maxw1;
gd->height=(ListViewRows-2)*fheight;
/* New gadget */
gd++;
tmp2=tmp+((ListViewRows-4)*fheight-INTERHEIGHT)/2;
gd->type=BUTTON_KIND;
gd->flags=PLACETEXT_IN;
gd->left=left;
gd->top=tmp2;
gd->width=maxw1;
gd->height=fheight;
/* Remove gadget */
gd++;
gd->type=BUTTON_KIND;
gd->flags=PLACETEXT_IN;
gd->tags=DisabledTags;
gd->left=left;
gd->top=tmp2+fheight+INTERHEIGHT;
gd->width=maxw1;
gd->height=fheight;
/* Move gadgets */
gd++;
tmp2=tmp+((ListViewRows-6)*fheight-3*INTERHEIGHT)/2;
tmp3=ww-maxw1-INTERWIDTH+left;
for (i=GAD_TOP; i<=GAD_BOTTOM; i++, gd++, tmp2+=fheight+INTERHEIGHT) {
gd->type=BUTTON_KIND;
gd->flags=PLACETEXT_IN;
gd->tags=DisabledTags;
gd->left=tmp3;
gd->top=tmp2;
gd->width=maxw1;
gd->height=fheight;
}
tmp+=(ListViewRows-2)*fheight+INTERHEIGHT;
/* Exec object button gadget */
i=strheight+INTERHEIGHT;
tmp2=ww-maxw2-2*INTERWIDTH;
maxw1=maxw2+left+INTERWIDTH;
gd->name=AppStrings[MSG_WINDOW_EXEC_GAD];
gd->type=BUTTON_KIND;
gd->flags=PLACETEXT_IN;
gd->tags=DisabledTags;
gd->left=left;
gd->top=tmp;
gd->width=maxw2;
gd->height=strheight;
/* Exec object text gadget */
gd++;
gd->type=TEXT_KIND;
gd->tags=exectags;
gd->left=maxw1;
gd->top=tmp;
gd->width=tmp2;
gd->height=strheight;
tmp+=i;
/* Image object button gadget */
gd++;
gd->name=AppStrings[MSG_WINDOW_IMAGE_GAD];
gd->type=BUTTON_KIND;
gd->flags=PLACETEXT_IN;
gd->tags=DisabledTags;
gd->left=left;
gd->top=tmp;
gd->width=maxw2;
gd->height=strheight;
/* Image object text gadget */
gd++;
gd->type=TEXT_KIND;
gd->tags=imagetags;
gd->left=maxw1;
gd->top=tmp;
gd->width=tmp2;
gd->height=strheight;
tmp+=i;
/* Sound object button gadget */
gd++;
gd->name=AppStrings[MSG_WINDOW_SOUND_GAD];
gd->type=BUTTON_KIND;
gd->flags=PLACETEXT_IN;
gd->tags=DisabledTags;
gd->left=left;
gd->top=tmp;
gd->width=maxw2;
gd->height=strheight;
/* Sound object text gadget */
gd++;
gd->type=TEXT_KIND;
gd->tags=soundtags;
gd->left=maxw1;
gd->top=tmp;
gd->width=tmp2;
gd->height=strheight;
tmp+=i;
/* OK button gadget */
gd++;
gd->type=BUTTON_KIND;
gd->flags=PLACETEXT_IN;
gd->left=left;
gd->top=tmp;
gd->width=maxw3;
gd->height=fheight;
/* Cancel button gadget */
gd++;
gd->type=BUTTON_KIND;
gd->flags=PLACETEXT_IN;
gd->left=ww-maxw3-INTERWIDTH+left;
gd->top=tmp;
gd->width=maxw3;
gd->height=fheight;
/* Init vanilla key array */
KeyArray[KEY_NEW] =FindVanillaKey(gdata[GAD_NEW].name);
KeyArray[KEY_EXEC] =FindVanillaKey(gdata[GAD_EXEC_BUT].name);
KeyArray[KEY_IMAGE] =FindVanillaKey(gdata[GAD_IMAGE_BUT].name);
KeyArray[KEY_SOUND] =FindVanillaKey(gdata[GAD_SOUND_BUT].name);
KeyArray[KEY_OK] =FindVanillaKey(gdata[GAD_OK].name);
KeyArray[KEY_CANCEL]=FindVanillaKey(gdata[GAD_CANCEL].name);
/* Init dummy requester structure */
InitRequester(&DummyReq);
}
/* Free tool list */
void FreeToolsList(struct List *toollist)
{
struct ToolNode *tn1,*tn2=GetHead(toollist);
/* Free tool nodes */
while (tn1=tn2) {
char *s;
/* Get next node */
tn2=GetSucc(tn1);
/* Remove node */
Remove((struct Node *) tn1);
/* Free node */
if (s=tn1->tn_Node.ln_Name) free(s);
if (s=tn1->tn_Image) free(s);
if (s=tn1->tn_Sound) free(s);
FreeMem(tn1,sizeof(struct ToolNode));
}
free(toollist);
}
/* Copy tools list */
struct List *CopyToolsList(struct List *srclist)
{
struct List *destlist;
/* Allocate new list */
if (destlist=malloc(sizeof(struct List))) {
/* Init new list */
NewList(destlist);
/* Valid source list? */
if (srclist) {
struct ToolNode *origtool=GetHead(srclist);
/* Scan tools list */
while (origtool) {
struct ToolNode *newtool;
if ((newtool=AllocMem(sizeof(struct ToolNode),MEMF_PUBLIC|MEMF_CLEAR)) &&
(!origtool->tn_Node.ln_Name || (newtool->tn_Node.ln_Name=
strdup(origtool->tn_Node.ln_Name))) &&
(!origtool->tn_Image || (newtool->tn_Image=
strdup(origtool->tn_Image))) &&
(!origtool->tn_Sound || (newtool->tn_Sound=
strdup(origtool->tn_Sound))))
AddTail(destlist,(struct Node *) newtool);
else {
char *s;
/* Error, free new node */
if (s=newtool->tn_Node.ln_Name) free(s);
if (s=newtool->tn_Image) free(s);
if (s=newtool->tn_Sound) free(s);
FreeMem(newtool,sizeof(struct ToolNode));
FreeToolsList(destlist);
return(NULL);
}
/* Get next node */
origtool=GetSucc(origtool);
}
}
}
return(destlist);
}
/* Open dock list edit window */
BOOL OpenDockListEditWindow(struct List *oldlist, struct Window *parent)
{
/* Copy node */
if (ToolsList=CopyToolsList(oldlist)) {
/* Set tags */
lvtags[0].ti_Data=(ULONG) ToolsList;
/* Create gadgets */
if (gl=CreateGadgetList(gdata,GADGETS)) {
/* Open window */
if (w=OpenWindowTags(NULL,WA_Left, parent->LeftEdge,
WA_Top, parent->TopEdge+WindowTop,
WA_InnerWidth, ww,
WA_InnerHeight, wh,
WA_AutoAdjust, TRUE,
WA_Title, AppStrings[MSG_DOCKLISTWIN_TITLE],
WA_PubScreen, PublicScreen,
WA_Flags, WFLG_CLOSEGADGET|WFLG_DRAGBAR|
WFLG_DEPTHGADGET|WFLG_RMBTRAP|
WFLG_ACTIVATE,
TAG_DONE)) {
/* Add gadgets to window */
AddGList(w,gl,(UWORD) -1,(UWORD) -1,NULL);
RefreshGList(gl,w,NULL,(UWORD) -1);
GT_RefreshWindow(w,NULL);
/* Set local variables */
w->UserPort=IDCMPPort;
w->UserData=(BYTE *) HandleDockListEditWindowIDCMP;
ModifyIDCMP(w,WINDOW_IDCMP);
CurrentWindow=w;
ReqOpen=FALSE;
CurrentTool=NULL;
CurrentTop=0;
CurrentOrd=-1;
/* All OK. */
return(TRUE);
}
FreeGadgets(gl);
}
FreeToolsList(ToolsList);
}
/* Call failed */
return(FALSE);
}
/* Close dock edit window */
static void CloseDockListEditWindow(void)
{
/* Free resources */
RemoveGList(w,gl,(UWORD) -1);
CloseWindowSafely(w);
FreeGadgets(gl);
}
/* Detach list */
static void DetachToolList(void)
{
GT_SetGadgetAttrs(gdata[GAD_TOOLS].gadget,w,NULL,GTLV_Labels,-1,
TAG_DONE);
}
/* Attach list */
static void AttachToolList(void)
{
GT_SetGadgetAttrs(gdata[GAD_TOOLS].gadget,w,NULL,GTLV_Labels, ToolsList,
GTLV_Top, CurrentTop,
GTLV_Selected, CurrentOrd,
TAG_DONE);
}
/* Disable tool gadgets */
static void DisableToolGadgets(BOOL disable)
{
DisableGadget(gdata[GAD_REMOVE].gadget,w,disable);
DisableGadget(gdata[GAD_TOP].gadget,w,disable);
DisableGadget(gdata[GAD_UP].gadget,w,disable);
DisableGadget(gdata[GAD_DOWN].gadget,w,disable);
DisableGadget(gdata[GAD_BOTTOM].gadget,w,disable);
DisableGadget(gdata[GAD_EXEC_BUT].gadget,w,disable);
DisableGadget(gdata[GAD_IMAGE_BUT].gadget,w,disable);
DisableGadget(gdata[GAD_SOUND_BUT].gadget,w,disable);
}
/* Set text gadget */
static void SetTextGadget(ULONG num, char *text)
{
GT_SetGadgetAttrs(gdata[num].gadget,w,NULL,GTTX_Text, text,
TAG_DONE);
}
/* New gadget function */
static void NewGadgetFunc(void)
{
struct ToolNode *tn;
/* Create dummy tool */
if (tn=AllocMem(sizeof(struct ToolNode),MEMF_PUBLIC|MEMF_CLEAR))
if (tn->tn_Node.ln_Name=strdup(AppStrings[MSG_LISTREQ_TITLE_EXEC])) {
/* Detach tool list */
DetachToolList();
/* Insert new node */
if (CurrentTool) {
/* Insert after current Tool */
Insert(ToolsList, (struct Node *) tn, (struct Node *) CurrentTool);
CurrentTop++;
CurrentOrd++;
} else {
/* Append to list */
struct Node *tmpnode;
ULONG i;
/* Add node to the end of list */
AddTail(ToolsList,(struct Node *) tn);
/* Search ordinal number */
tmpnode=GetHead(ToolsList);
for (i=0; tmpnode; i++) tmpnode=GetSucc(tmpnode);
CurrentOrd=--i;
CurrentTop=(i>ListViewRows-5) ? i-ListViewRows+5 : 0;
/* Enable tool gadgets */
DisableToolGadgets(FALSE);
}
CurrentTool=tn;
/* Set text gadgets */
SetTextGadget(GAD_EXEC_TXT,tn->tn_Node.ln_Name);
SetTextGadget(GAD_IMAGE_TXT,NULL);
SetTextGadget(GAD_SOUND_TXT,NULL);
/* Attach tool list */
AttachToolList();
} else
/* Error */
FreeMem(tn,sizeof(struct ToolNode));
}
/* Exec, Image & Sound button gadget function */
static void TextButtonGadgetFunc(ULONG gadnum, ULONG listnum)
{
if (!ReqOpen) {
/* Save gadget number */
CurrentGadgetNum=gadnum;
/* Open list requester */
if (OpenListRequester(listnum,w)) {
/* Disable window */
DisableWindow(w,&DummyReq);
/* Set update function */
UpdateWindow=UpdateDockListEditWindow;
ReqOpen=TRUE;
}
}
}
/* Handle dock list edit window IDCMP events */
void *HandleDockListEditWindowIDCMP(struct IntuiMessage *msg)
{
struct List *NewList=NULL;
/* Which IDCMP class? */
switch (msg->Class) {
case IDCMP_CLOSEWINDOW: NewList=(struct List *) -1;
FreeToolsList(ToolsList);
break;
case IDCMP_REFRESHWINDOW: GT_BeginRefresh(w);
GT_EndRefresh(w,TRUE);
break;
case IDCMP_GADGETUP:
switch (((struct Gadget *) msg->IAddress)->GadgetID) {
case GAD_TOOLS: {
ULONG i;
/* Find node */
CurrentTop=(msg->Code>ListViewRows-5) ?
msg->Code-ListViewRows+5 : 0;
CurrentOrd=msg->Code;
CurrentTool=GetHead(ToolsList);
for (i=0; i<CurrentOrd; i++)
CurrentTool=GetSucc(CurrentTool);
/* Set text gadgets */
SetTextGadget(GAD_EXEC_TXT,
CurrentTool->tn_Node.ln_Name);
SetTextGadget(GAD_IMAGE_TXT,CurrentTool->tn_Image);
SetTextGadget(GAD_SOUND_TXT,CurrentTool->tn_Sound);
/* Activate object gadgets */
DisableToolGadgets(FALSE);
}
break;
case GAD_NEW: NewGadgetFunc();
break;
case GAD_REMOVE: if (CurrentTool) {
char *s;
/* Detach tool list */
DetachToolList();
/* Disable tool gadgets */
DisableToolGadgets(TRUE);
/* Set text gadgets */
SetTextGadget(GAD_EXEC_TXT,NULL);
SetTextGadget(GAD_IMAGE_TXT,NULL);
SetTextGadget(GAD_SOUND_TXT,NULL);
/* Remove Node */
Remove((struct Node *) CurrentTool);
/* Free Node */
if (s=CurrentTool->tn_Node.ln_Name) free(s);
if (s=CurrentTool->tn_Image) free(s);
if (s=CurrentTool->tn_Sound) free(s);
FreeMem(CurrentTool,sizeof(struct ToolNode));
/* Reset pointers */
CurrentTool=NULL;
if (CurrentTop) CurrentTop--;
CurrentOrd=-1;
/* Attach tool list */
AttachToolList();
}
break;
case GAD_TOP: if (CurrentTool) {
/* Detach tool list */
DetachToolList();
/* Move node to top of list */
Remove((struct Node *) CurrentTool);
AddHead(ToolsList,(struct Node *) CurrentTool);
CurrentTop=0;
CurrentOrd=0;
/* Attach tool list */
AttachToolList();
}
break;
case GAD_UP: {
struct Node *pred;
/* Node valid and has a predecessor? */
if (CurrentTool && (pred=GetPred(CurrentTool))) {
/* Detach tool list */
DetachToolList();
/* Move node one position up */
pred=GetPred(pred);
Remove((struct Node *) CurrentTool);
Insert(ToolsList,(struct Node *) CurrentTool,pred);
--CurrentOrd;
CurrentTop=(CurrentOrd>ListViewRows-5) ?
CurrentOrd-ListViewRows+5 : 0;
/* Attach tool list */
AttachToolList();
}
}
break;
case GAD_DOWN: {
struct Node *succ;
/* Node valid and has a successor? */
if (CurrentTool && (succ=GetSucc(CurrentTool))) {
/* Detach tool list */
DetachToolList();
/* Move node one position down */
Remove((struct Node *) CurrentTool);
Insert(ToolsList,(struct Node *) CurrentTool,succ);
++CurrentOrd;
CurrentTop=(CurrentOrd>ListViewRows-5) ?
CurrentOrd-ListViewRows+5 : 0;
/* Attach tool list */
AttachToolList();
}
}
break;
case GAD_BOTTOM: if (CurrentTool) {
ULONG i;
struct Node *tmpnode;
/* Detach tool list */
DetachToolList();
/* Move tool to bottom of list */
Remove((struct Node *) CurrentTool);
AddTail(ToolsList,(struct Node *) CurrentTool);
/* Search ordinal number */
tmpnode=GetHead(ToolsList);
for (i=0; tmpnode; i++) tmpnode=GetSucc(tmpnode);
CurrentOrd=--i;
CurrentTop=(i>ListViewRows-5) ? i-ListViewRows+5 : 0;
/* Attach tool list */
AttachToolList();
}
break;
case GAD_EXEC_BUT: TextButtonGadgetFunc(GAD_EXEC_TXT,LISTREQ_EXEC);
break;
case GAD_IMAGE_BUT: TextButtonGadgetFunc(GAD_IMAGE_TXT,LISTREQ_IMAGE);
break;
case GAD_SOUND_BUT: TextButtonGadgetFunc(GAD_SOUND_TXT,LISTREQ_SOUND);
break;
case GAD_OK: NewList=ToolsList;
break;
case GAD_CANCEL: NewList=(struct List *) -1;
FreeToolsList(ToolsList);
break;
}
break;
case IDCMP_VANILLAKEY:
switch (MatchVanillaKey(msg->Code,KeyArray)) {
case KEY_NEW: NewGadgetFunc();
break;
case KEY_EXEC: TextButtonGadgetFunc(GAD_EXEC_TXT,LISTREQ_EXEC);
break;
case KEY_IMAGE: TextButtonGadgetFunc(GAD_IMAGE_TXT,LISTREQ_IMAGE);
break;
case KEY_SOUND: TextButtonGadgetFunc(GAD_SOUND_TXT,LISTREQ_SOUND);
break;
case KEY_OK: NewList=ToolsList;
break;
case KEY_CANCEL: NewList=(struct List *) -1;
FreeToolsList(ToolsList);
break;
}
break;
}
/* Close window? */
if (NewList) {
/* Yes. But first reply message!!! */
GT_ReplyIMsg(msg);
CloseDockListEditWindow();
}
return(NewList);
}
/* Update dock edit window */
void UpdateDockListEditWindow(void *data)
{
/* Got data? */
if (data != LREQRET_CANCEL) {
char *new;
/* Selected something? */
new=(data == LREQRET_NOSELECT) ? NULL : ((struct Node *) data)->ln_Name;
/* Duplicate name */
if (!new || (new=strdup(new))) {
char *old;
/* Which object? */
switch (CurrentGadgetNum) {
case GAD_EXEC_TXT: /* Detach tool list */
DetachToolList();
/* Set new Exec name */
old=CurrentTool->tn_Node.ln_Name;
/* Set VALID name! */
if (new || (new=strdup(
AppStrings[MSG_LISTREQ_TITLE_EXEC])))
CurrentTool->tn_Node.ln_Name=new;
else
/* Could not set valid name */
old=NULL;
/* Attach tool list */
AttachToolList();
break;
case GAD_IMAGE_TXT: /* Set new Image name */
old=CurrentTool->tn_Image;
CurrentTool->tn_Image=new;
break;
case GAD_SOUND_TXT: /* Set new Sound name */
old=CurrentTool->tn_Sound;
CurrentTool->tn_Sound=new;
break;
}
/* Free old string */
if (old) free(old);
/* Set new text */
SetTextGadget(CurrentGadgetNum,new);
}
}
/* Enable window */
EnableWindow(w,&DummyReq,WINDOW_IDCMP);
/* Restore update function pointer */
UpdateWindow=UpdateDockEditWindow;
CurrentWindow=w;
ReqOpen=FALSE;
}